孤舟蓑笠翁,独钓寒江雪

Android JetPack

相关博客:
Android Architecture Components – Room
Android Architecture Components – LifeCycle
Android Architecture Components – LiveData
Android Architecture Components – ViewModel

概述

Google 在 2018 Google I/O 大会上推出了 Android Jetpack,它包含了开发库、工具以及最佳实践指南。
Jetpack 是背包式飞行器的意思,是一种小巧的个人飞行器。顾名思义,通过使用Android Jetpack 这套组件,可以帮助开发者更高效、更容易地构建优秀的应用。为此,Android 官方团队也把 Jetpack 的Logo 设计成了一个背着火箭的小机器人。
除了在 2018 Google I/O 大会上新添加的功能外,它还把以前退出的一些功能囊括其中,比如 Architecture Components 等。并且,Android 团队将继续在Android平台上为 Jetpack 添加新的功能。
下面来看一下 Jetpack 包含了哪些功能,下图会随着 Jetpack 功能的更新保持同步更新:

效果图

接下来也会通过一系列的博客来介绍 Jetpack 的使用。
先来看一下 Jetpack 中的架构组件,这些组件关联使用将更能发挥它的作用,我们将采取循序渐进,由浅入深的方式来逐步介绍这些组件的使用。
Google 官方Demo源码:
https://github.com/googlecodelabs/android-lifecycles
https://github.com/googlesamples/android-architecture-components
https://github.com/googlesamples/android-sunflower

关于AndroidX

先来个插曲介绍一下 AndroidX,后面 Android 会把 support 库放到 AndroidX 中,仅仅会改变包名和 Maven 库的名字,类的名字不会改变。

添加依赖汇总

官方文档

添加 Google Maven 仓库

在project下的build.gradle中添加Maven仓库

1
2
3
4
5
6
allprojects {
repositories {
jcenter()
google()//添加Google Maven仓库
}
}

添加依赖

LifeCycle

包含 LiveData 和 ViewModel 的依赖。

Android X
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dependencies {
def lifecycle_version = "2.0.0"

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData). Some UI
// AndroidX libraries use this lightweight import for Lifecycle
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // use kapt for Kotlin
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

// optional - ReactiveStreams support for LiveData
implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // use -ktx for Kotlin

// optional - Test helpers for LiveData
testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
}
AndroidX 之前版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
dependencies {
def lifecycle_version = "1.1.1"

// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"

annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // use kapt for Kotlin
// alternately - if using Java8, use the following instead of compiler
// 比如你想使用 DefaultLifecycleObserver 就要依赖 java8
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

Room

AndroidX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dependencies {
def room_version = "2.1.0-alpha03"

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // use kapt for Kotlin

// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"

// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"

// optional - Coroutines support for Room
implementation "androidx.room:room-coroutines:$room_version"

// Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}
AndroidX 之前版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dependencies {
def room_version = "1.1.1"

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // use kapt for Kotlin

// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"

// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"

// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dependencies {
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.1"
// alternatively, just ViewModel
implementation "android.arch.lifecycle:viewmodel:1.1.1"
// alternatively, just LiveData
implementation "android.arch.lifecycle:livedata:1.1.1"

annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

// Room (use 1.1.0-beta3 for latest beta)
implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

// Paging
implementation "android.arch.paging:runtime:1.0.0-rc1"

// Test helpers for LiveData
testImplementation "android.arch.core:core-testing:1.1.1"

// Test helpers for Room
testImplementation "android.arch.persistence.room:testing:1.0.0"
}